home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1997 February / PC Plus Super CD (Issue 124) (PCP124-2-97) (February 1997).iso / handson / vbwkshp / mciapp.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1996-11-08  |  57.6 KB  |  1,801 lines

  1. VERSION 4.00
  2. Begin VB.Form MCIApp 
  3.    BackColor       =   &H00C0C0C0&
  4.    ClientHeight    =   4680
  5.    ClientLeft      =   2280
  6.    ClientTop       =   2100
  7.    ClientWidth     =   5535
  8.    ForeColor       =   &H00000000&
  9.    Height          =   5085
  10.    Icon            =   "MCIAPP.frx":0000
  11.    KeyPreview      =   -1  'True
  12.    Left            =   2220
  13.    LinkMode        =   1  'Source
  14.    LinkTopic       =   "Form4"
  15.    ScaleHeight     =   4680
  16.    ScaleWidth      =   5535
  17.    Top             =   1755
  18.    Width           =   5655
  19.    Begin VB.CommandButton cmdCherish 
  20.       Caption         =   "&Copy To Favourites"
  21.       Enabled         =   0   'False
  22.       Height          =   465
  23.       Left            =   2280
  24.       TabIndex        =   10
  25.       Top             =   4110
  26.       Width           =   1515
  27.    End
  28.    Begin VB.TextBox txtSpeed 
  29.       Alignment       =   2  'Center
  30.       BeginProperty Font 
  31.          name            =   "MS Sans Serif"
  32.          charset         =   0
  33.          weight          =   700
  34.          size            =   9.75
  35.          underline       =   0   'False
  36.          italic          =   0   'False
  37.          strikethrough   =   0   'False
  38.       EndProperty
  39.       Height          =   360
  40.       Left            =   4290
  41.       Locked          =   -1  'True
  42.       MultiLine       =   -1  'True
  43.       TabIndex        =   17
  44.       TabStop         =   0   'False
  45.       Text            =   "MCIAPP.frx":030A
  46.       Top             =   4680
  47.       Width           =   375
  48.    End
  49.    Begin VB.CommandButton cmdUp 
  50.       Caption         =   ">"
  51.       Height          =   375
  52.       Left            =   5190
  53.       TabIndex        =   15
  54.       Top             =   4680
  55.       Width           =   225
  56.    End
  57.    Begin VB.CommandButton cmdDown 
  58.       Caption         =   "<"
  59.       Height          =   375
  60.       Left            =   4020
  61.       TabIndex        =   14
  62.       Top             =   4680
  63.       Width           =   225
  64.    End
  65.    Begin VB.CommandButton cmdRoll 
  66.       Caption         =   "&Roll Graphics Every >"
  67.       Enabled         =   0   'False
  68.       Height          =   375
  69.       Left            =   2070
  70.       TabIndex        =   13
  71.       Top             =   4680
  72.       Width           =   1875
  73.    End
  74.    Begin VB.CommandButton cmdHold 
  75.       Caption         =   "&Hold Graphics"
  76.       Height          =   375
  77.       Left            =   120
  78.       TabIndex        =   12
  79.       Top             =   4680
  80.       Width           =   1875
  81.    End
  82.    Begin VB.Timer Timer3 
  83.       Enabled         =   0   'False
  84.       Interval        =   10000
  85.       Left            =   1020
  86.       Top             =   4020
  87.    End
  88.    Begin VB.CheckBox chkLoop 
  89.       BackColor       =   &H00C0C0C0&
  90.       Caption         =   "&Loop"
  91.       Height          =   195
  92.       Left            =   4740
  93.       TabIndex        =   5
  94.       Top             =   3360
  95.       Width           =   195
  96.    End
  97.    Begin VB.Timer Timer2 
  98.       Left            =   540
  99.       Top             =   4020
  100.    End
  101.    Begin VB.CheckBox chkPlaySelect 
  102.       BackColor       =   &H00C0C0C0&
  103.       Height          =   195
  104.       Left            =   2280
  105.       TabIndex        =   3
  106.       Top             =   3360
  107.       Width           =   195
  108.    End
  109.    Begin VB.CommandButton cmdDone 
  110.       BackColor       =   &H00C0C0C0&
  111.       Caption         =   "I've Heard &Enough"
  112.       Height          =   465
  113.       Left            =   3900
  114.       TabIndex        =   11
  115.       Top             =   4110
  116.       Width           =   1515
  117.    End
  118.    Begin VB.Timer Timer1 
  119.       Left            =   60
  120.       Top             =   4020
  121.    End
  122.    Begin VB.CheckBox chkPlayAll 
  123.       BackColor       =   &H00C0C0C0&
  124.       ForeColor       =   &H00000000&
  125.       Height          =   195
  126.       Left            =   3810
  127.       TabIndex        =   4
  128.       Top             =   3360
  129.       Width           =   195
  130.    End
  131.    Begin VB.DriveListBox Drive1 
  132.       BackColor       =   &H00FFFFFF&
  133.       BeginProperty Font 
  134.          name            =   "MS Sans Serif"
  135.          charset         =   0
  136.          weight          =   700
  137.          size            =   8.25
  138.          underline       =   0   'False
  139.          italic          =   0   'False
  140.          strikethrough   =   0   'False
  141.       EndProperty
  142.       ForeColor       =   &H00000000&
  143.       Height          =   315
  144.       Left            =   2280
  145.       TabIndex        =   0
  146.       Top             =   2880
  147.       Width           =   3135
  148.    End
  149.    Begin VB.DirListBox Dir1 
  150.       BackColor       =   &H00FFFFFF&
  151.       BeginProperty Font 
  152.          name            =   "MS Sans Serif"
  153.          charset         =   0
  154.          weight          =   700
  155.          size            =   8.25
  156.          underline       =   0   'False
  157.          italic          =   0   'False
  158.          strikethrough   =   0   'False
  159.       EndProperty
  160.       ForeColor       =   &H00000000&
  161.       Height          =   2280
  162.       Left            =   2280
  163.       TabIndex        =   1
  164.       Top             =   480
  165.       Width           =   3135
  166.    End
  167.    Begin VB.FileListBox File1 
  168.       BackColor       =   &H00FFFFFF&
  169.       BeginProperty Font 
  170.          name            =   "MS Sans Serif"
  171.          charset         =   0
  172.          weight          =   700
  173.          size            =   8.25
  174.          underline       =   0   'False
  175.          italic          =   0   'False
  176.          strikethrough   =   0   'False
  177.       EndProperty
  178.       ForeColor       =   &H00000000&
  179.       Height          =   3180
  180.       Left            =   120
  181.       MultiSelect     =   2  'Extended
  182.       Pattern         =   "*.mid"
  183.       TabIndex        =   2
  184.       Top             =   480
  185.       Width           =   1995
  186.    End
  187.    Begin VB.HScrollBar HScroll1 
  188.       Height          =   255
  189.       Left            =   120
  190.       Max             =   100
  191.       TabIndex        =   6
  192.       TabStop         =   0   'False
  193.       Top             =   3720
  194.       Width           =   5295
  195.    End
  196.    Begin VB.Label Label5 
  197.       BackStyle       =   0  'Transparent
  198.       Caption         =   "Loop"
  199.       BeginProperty Font 
  200.          name            =   "MS Sans Serif"
  201.          charset         =   0
  202.          weight          =   700
  203.          size            =   8.25
  204.          underline       =   0   'False
  205.          italic          =   0   'False
  206.          strikethrough   =   0   'False
  207.       EndProperty
  208.       ForeColor       =   &H00000000&
  209.       Height          =   225
  210.       Left            =   4980
  211.       TabIndex        =   21
  212.       Top             =   3360
  213.       Width           =   465
  214.    End
  215.    Begin VB.Label Label4 
  216.       BackStyle       =   0  'Transparent
  217.       Caption         =   " Play All"
  218.       BeginProperty Font 
  219.          name            =   "MS Sans Serif"
  220.          charset         =   0
  221.          weight          =   700
  222.          size            =   8.25
  223.          underline       =   0   'False
  224.          italic          =   0   'False
  225.          strikethrough   =   0   'False
  226.       EndProperty
  227.       ForeColor       =   &H00000000&
  228.       Height          =   225
  229.       Left            =   3990
  230.       TabIndex        =   20
  231.       Top             =   3360
  232.       Width           =   705
  233.    End
  234.    Begin VB.Label Label3 
  235.       BackStyle       =   0  'Transparent
  236.       Caption         =   " Play Selection"
  237.       BeginProperty Font 
  238.          name            =   "MS Sans Serif"
  239.          charset         =   0
  240.          weight          =   700
  241.          size            =   8.25
  242.          underline       =   0   'False
  243.          italic          =   0   'False
  244.          strikethrough   =   0   'False
  245.       EndProperty
  246.       ForeColor       =   &H00000000&
  247.       Height          =   225
  248.       Left            =   2460
  249.       TabIndex        =   19
  250.       Top             =   3360
  251.       Width           =   1305
  252.    End
  253.    Begin VB.Label Label1 
  254.       BackColor       =   &H0000FFFF&
  255.       BackStyle       =   0  'Transparent
  256.       Caption         =   "secs"
  257.       BeginProperty Font 
  258.          name            =   "MS Sans Serif"
  259.          charset         =   0
  260.          weight          =   700
  261.          size            =   8.25
  262.          underline       =   0   'False
  263.          italic          =   0   'False
  264.          strikethrough   =   0   'False
  265.       EndProperty
  266.       ForeColor       =   &H00FFFFFF&
  267.       Height          =   255
  268.       Left            =   4710
  269.       TabIndex        =   18
  270.       Top             =   4740
  271.       Width           =   465
  272.    End
  273.    Begin VB.Image Image1 
  274.       Height          =   7335
  275.       Index           =   9
  276.       Left            =   5760
  277.       Picture         =   "MCIAPP.frx":030D
  278.       Stretch         =   -1  'True
  279.       Top             =   240
  280.       Visible         =   0   'False
  281.       Width           =   6015
  282.    End
  283.    Begin VB.Image Image1 
  284.       Height          =   7335
  285.       Index           =   8
  286.       Left            =   5760
  287.       Picture         =   "MCIAPP.frx":3AF5
  288.       Stretch         =   -1  'True
  289.       Top             =   240
  290.       Visible         =   0   'False
  291.       Width           =   6015
  292.    End
  293.    Begin VB.Image Image1 
  294.       Height          =   7335
  295.       Index           =   7
  296.       Left            =   5760
  297.       Picture         =   "MCIAPP.frx":75F7
  298.       Stretch         =   -1  'True
  299.       Top             =   240
  300.       Visible         =   0   'False
  301.       Width           =   6015
  302.    End
  303.    Begin VB.Image Image1 
  304.       Height          =   7335
  305.       Index           =   6
  306.       Left            =   5760
  307.       Picture         =   "MCIAPP.frx":A655
  308.       Stretch         =   -1  'True
  309.       Top             =   240
  310.       Visible         =   0   'False
  311.       Width           =   6015
  312.    End
  313.    Begin VB.Image Image1 
  314.       Height          =   7335
  315.       Index           =   5
  316.       Left            =   5760
  317.       Picture         =   "MCIAPP.frx":169BF
  318.       Stretch         =   -1  'True
  319.       Top             =   240
  320.       Visible         =   0   'False
  321.       Width           =   6015
  322.    End
  323.    Begin VB.Image Image1 
  324.       Height          =   7335
  325.       Index           =   4
  326.       Left            =   5760
  327.       Picture         =   "MCIAPP.frx":1A459
  328.       Stretch         =   -1  'True
  329.       Top             =   240
  330.       Visible         =   0   'False
  331.       Width           =   6015
  332.    End
  333.    Begin VB.Image Image1 
  334.       Height          =   7335
  335.       Index           =   3
  336.       Left            =   5760
  337.       Picture         =   "MCIAPP.frx":1E4AB
  338.       Stretch         =   -1  'True
  339.       Top             =   240
  340.       Visible         =   0   'False
  341.       Width           =   6015
  342.    End
  343.    Begin VB.Image Image1 
  344.       Height          =   7335
  345.       Index           =   2
  346.       Left            =   5760
  347.       Picture         =   "MCIAPP.frx":21139
  348.       Stretch         =   -1  'True
  349.       Top             =   240
  350.       Visible         =   0   'False
  351.       Width           =   6015
  352.    End
  353.    Begin VB.Image Image1 
  354.       Height          =   7335
  355.       Index           =   1
  356.       Left            =   5760
  357.       Picture         =   "MCIAPP.frx":226BD
  358.       Stretch         =   -1  'True
  359.       Top             =   240
  360.       Visible         =   0   'False
  361.       Width           =   6015
  362.    End
  363.    Begin VB.Image Image2 
  364.       Height          =   2550
  365.       Index           =   9
  366.       Left            =   120
  367.       Picture         =   "MCIAPP.frx":26DBB
  368.       Stretch         =   -1  'True
  369.       Top             =   5160
  370.       Visible         =   0   'False
  371.       Width           =   5295
  372.    End
  373.    Begin VB.Image Image2 
  374.       Height          =   2550
  375.       Index           =   8
  376.       Left            =   120
  377.       Picture         =   "MCIAPP.frx":2B811
  378.       Stretch         =   -1  'True
  379.       Top             =   5160
  380.       Visible         =   0   'False
  381.       Width           =   5295
  382.    End
  383.    Begin VB.Image Image2 
  384.       Height          =   2550
  385.       Index           =   7
  386.       Left            =   120
  387.       Picture         =   "MCIAPP.frx":31DF3
  388.       Stretch         =   -1  'True
  389.       Top             =   5160
  390.       Visible         =   0   'False
  391.       Width           =   5295
  392.    End
  393.    Begin VB.Image Image2 
  394.       Height          =   2550
  395.       Index           =   6
  396.       Left            =   120
  397.       Picture         =   "MCIAPP.frx":3900F
  398.       Stretch         =   -1  'True
  399.       Top             =   5160
  400.       Visible         =   0   'False
  401.       Width           =   5295
  402.    End
  403.    Begin VB.Image Image2 
  404.       Height          =   2550
  405.       Index           =   5
  406.       Left            =   120
  407.       Picture         =   "MCIAPP.frx":3AF29
  408.       Stretch         =   -1  'True
  409.       Top             =   5160
  410.       Visible         =   0   'False
  411.       Width           =   5295
  412.    End
  413.    Begin VB.Image Image2 
  414.       Height          =   2550
  415.       Index           =   4
  416.       Left            =   120
  417.       Picture         =   "MCIAPP.frx":42D07
  418.       Stretch         =   -1  'True
  419.       Top             =   5160
  420.       Visible         =   0   'False
  421.       Width           =   5295
  422.    End
  423.    Begin VB.Image Image2 
  424.       Height          =   4485
  425.       Index           =   3
  426.       Left            =   120
  427.       Picture         =   "MCIAPP.frx":4E01D
  428.       Stretch         =   -1  'True
  429.       Top             =   5160
  430.       Visible         =   0   'False
  431.       Width           =   7410
  432.    End
  433.    Begin VB.Image Image2 
  434.       Height          =   2550
  435.       Index           =   2
  436.       Left            =   120
  437.       Picture         =   "MCIAPP.frx":5078B
  438.       Stretch         =   -1  'True
  439.       Top             =   5160
  440.       Visible         =   0   'False
  441.       Width           =   5295
  442.    End
  443.    Begin VB.Image Image2 
  444.       Height          =   2550
  445.       Index           =   1
  446.       Left            =   120
  447.       Picture         =   "MCIAPP.frx":51441
  448.       Stretch         =   -1  'True
  449.       Top             =   5160
  450.       Visible         =   0   'False
  451.       Width           =   5295
  452.    End
  453.    Begin VB.Image Image2 
  454.       Height          =   2550
  455.       Index           =   0
  456.       Left            =   120
  457.       Picture         =   "MCIAPP.frx":56B03
  458.       Stretch         =   -1  'True
  459.       Top             =   5160
  460.       Width           =   5295
  461.    End
  462.    Begin VB.Image Image1 
  463.       Height          =   7335
  464.       Index           =   0
  465.       Left            =   5760
  466.       Picture         =   "MCIAPP.frx":5E8E1
  467.       Stretch         =   -1  'True
  468.       Top             =   240
  469.       Width           =   6015
  470.    End
  471.    Begin MCI.MMControl MMSelect 
  472.       Height          =   495
  473.       Left            =   120
  474.       TabIndex        =   7
  475.       Top             =   4080
  476.       Width           =   3660
  477.       _Version        =   65536
  478.       AutoEnable      =   0   'False
  479.       _ExtentX        =   6456
  480.       _ExtentY        =   873
  481.       _StockProps     =   32
  482.    End
  483.    Begin MCI.MMControl MMSingle 
  484.       Height          =   495
  485.       Left            =   120
  486.       TabIndex        =   9
  487.       Top             =   4080
  488.       Width           =   3660
  489.       _Version        =   65536
  490.       _ExtentX        =   6456
  491.       _ExtentY        =   873
  492.       _StockProps     =   32
  493.    End
  494.    Begin MCI.MMControl MMAll 
  495.       Height          =   495
  496.       Left            =   120
  497.       TabIndex        =   8
  498.       Top             =   4080
  499.       Width           =   3660
  500.       _Version        =   65536
  501.       AutoEnable      =   0   'False
  502.       _ExtentX        =   6456
  503.       _ExtentY        =   873
  504.       _StockProps     =   32
  505.    End
  506.    Begin VB.Label Label2 
  507.       Alignment       =   2  'Center
  508.       BackStyle       =   0  'Transparent
  509.       BeginProperty Font 
  510.          name            =   "Courier"
  511.          charset         =   0
  512.          weight          =   700
  513.          size            =   9.75
  514.          underline       =   0   'False
  515.          italic          =   0   'False
  516.          strikethrough   =   0   'False
  517.       EndProperty
  518.       ForeColor       =   &H00000000&
  519.       Height          =   255
  520.       Left            =   0
  521.       TabIndex        =   16
  522.       Top             =   120
  523.       Width           =   5535
  524.    End
  525. Attribute VB_Name = "MCIApp"
  526. Attribute VB_Creatable = False
  527. Attribute VB_Exposed = False
  528. 'Constants & variables relative to MCIApp form
  529. 'Constants for MCI controls
  530. Const conInterval = 50
  531. Const conIntervalPlus = 55
  532. Const vbMCIModePlay = 526
  533. 'Constants used when WindowState is < 2 (maximised)
  534. Const white = &HFFFFFF
  535. Const black = &H0
  536. Const grey = &HC0C0C0
  537. 'Form level variables
  538. Dim CurrentValue As Double
  539. Dim DefH As Integer, DefW As Integer
  540. Dim a As Integer, s As Integer
  541. Dim msecs
  542. Dim Drv As Integer
  543. Sub Handle_Error()
  544.     'What was the error number ?
  545.     Select Case Err
  546.         Case 76 'Path not found'
  547.             'So make it
  548.             MkDir FavouritesPath
  549.             Beep
  550.             MsgBox "Favourites' folder was missing !" & Chr(10) & Chr(13) & Chr(13) & "A new one has been created.", 64, "MIDI CYCLOTRON"
  551.         Case 68 'Device Unavailable (No floppy disc or CD inserted)
  552.             MsgBox "Device Not Available !" & Chr(10) & Chr(10) & Chr(13) & "(Perhaps there is no floppy disc or CD in the drive.)", 48, "MIDI CYCLOTRON"
  553.             'So set drive to App.Path
  554.             Drive1.Drive = App.Path
  555.         'Otherwise,
  556.         Case Else
  557.             'we didn't expect it
  558.             Beep
  559.             MsgBox "Unexpected error !" & Chr(10) & Chr(10) & Chr(13) & "Midi Cyclotron will now shut down !", 16, "MIDI CYCLOTRON"
  560.             'So end
  561.             Unload Me
  562.             End
  563.         End Select
  564. End Sub
  565. Private Sub chkLoop_Click()
  566.     'If loop has been selected then
  567.     If chkLoop.value = 1 Then
  568.         'check to see if both multi play options are unchecked
  569.         If chkPlayAll.value = 0 And chkPlaySelect.value = 0 Then
  570.             'If so, then uncheck loop as it is not valid
  571.             chkLoop.value = 0
  572.         End If
  573.     End If
  574. End Sub
  575. Private Sub chkPlayAll_Click()
  576.     'Check to test if both multi play options
  577.     'are being set to off
  578.     If chkPlayAll.value = 0 And chkPlaySelect.value = 0 Then
  579.         'If so, then set loop to off as it is no longer valid
  580.         chkLoop.value = 0
  581.     'If 'Play Selection' is checked then uncheck it
  582.     'We only want one option chosen
  583.     ElseIf chkPlaySelect.value = 1 Then
  584.             chkPlaySelect.value = 0
  585.     End If
  586.     'If playing ALL
  587.     If chkPlayAll.value = 1 Then
  588.         'then test for files not displayed
  589.         'If none are displayed
  590.         If Me.File1.ListCount = 0 Then
  591.             'then tell user
  592.             Beep
  593.             MsgBox "No files displayed !", 48, "MIDI CYCLOTRON"
  594.             
  595.             'uncheck Play All
  596.             chkPlayAll.value = 0
  597.             
  598.             'and exit
  599.             Exit Sub
  600.         End If
  601.         
  602.         'Determine file to start with
  603.         frmOptions.Show 1
  604.         
  605.         'Play All was cancelled
  606.         If Cancelled = True Then
  607.             'so reset variable
  608.             Cancelled = False
  609.             
  610.             'uncheck Play All
  611.             chkPlayAll.value = 0
  612.             
  613.             'and exit
  614.             Exit Sub
  615.         End If
  616.         
  617.         'What was chosen ?
  618.         If StartWhere = 0 Then 'First chosen
  619.             'Start at beginning
  620.             i = 0
  621.         ElseIf StartWhere = 1 Then 'Number entered
  622.             'Start at number entered
  623.             i = StartNumber - 1
  624.             'Set 'resume at' var'
  625.             FileMark = i
  626.         ElseIf StartWhere = 2 Then 'Name entered
  627.             'Set a flag
  628.             Flag = 0
  629.             'Name entered so loop to match names
  630.             For C = 0 To Me.File1.ListCount - 1
  631.                 'If match then
  632.                 If Me.File1.List(C) = StartName Then
  633.                     'Set file number to play
  634.                     i = C
  635.                     
  636.                     'Set 'resume at' var'
  637.                     FileMark = i
  638.                     
  639.                     'and exit loop
  640.                     Exit For
  641.                 'Otherwise, if we are at end of list and Flag = 0 (no names matched)
  642.                 ElseIf C = Me.File1.ListCount - 1 And Me.File1.List(C) <> StartName Then
  643.                     'then tell user
  644.                     Beep
  645.                     MsgBox "File name not found in list", 64, "MIDI CYCLOTRON"
  646.                     
  647.                     'Uncheck box
  648.                     chkPlayAll.value = 0
  649.                     
  650.                     'and exit
  651.                     Exit Sub
  652.                 End If
  653.             'Loop if not at end
  654.             Next C
  655.         'Otherwise 'resume at' was chosen
  656.         ElseIf StartWhere = 3 Then
  657.             i = FileMark
  658.             End If
  659.         
  660.         'Bring 'Play All' MCI to front
  661.         MMAll.ZOrder 0
  662.         
  663.         'Close single play in case it is running
  664.         MMSingle.Command = "Close"
  665.         
  666.         'andstart the timer to play all files in turn
  667.         Timer1.Interval = 1
  668.     'Otherwise, it is unchecked so close play all
  669.     Else
  670.         MMAll.Command = "Close"
  671.         
  672.         'Reset form label caption
  673.         Label2.Caption = File1.ListCount & " Files"
  674.         
  675.         'and bring single play MCI to front
  676.         MMSingle.ZOrder 0
  677.         
  678.         'and reset the file counter
  679.         i = 0
  680.     End If
  681. End Sub
  682. Private Sub chkPlaySelect_Click()
  683.     'Check to test if both multi play options are being set to off
  684.     If chkPlayAll.value = 0 And chkPlaySelect.value = 0 Then
  685.         'If so, then force loop to off. It's not valid
  686.         chkLoop.value = 0
  687.         'Uncheck 'Play All' just in case
  688.     ElseIf chkPlayAll.value = 1 Then
  689.         chkPlayAll.value = 0
  690.         'Reset 'resume at' var'
  691.         FileMark = -1
  692.     End If
  693.     'If play selected is checked
  694.     If chkPlaySelect.value = 1 Then
  695.         'Test for files not displayed or selected
  696.         Flag = 0
  697.         
  698.         'Test for files displayed and/or selected
  699.         If File1.ListCount = 0 Then
  700.             'set message word
  701.             RightWord = "displayed"
  702.             
  703.             'jump to message
  704.             GoTo NoHilite
  705.         Else
  706.             'Otherwise there are files displayed
  707.             For X = 0 To File1.ListCount - 1
  708.                 'so loop to check for a selection
  709.                 If File1.Selected(X) Then
  710.                     Flag = 1
  711.                     
  712.                     'If this is a fresh session of 'Play Selection' (Filemark = -1) then
  713.                     If FileMark = -1 Then
  714.                         'the fourth play option is not valid
  715.                         frmOptions.optMethod(3).Enabled = False
  716.                         frmOptions.txtResume.Visible = False
  717.                         
  718.                         'Exit loop
  719.                         Exit For
  720.                     'Otherwise,
  721.                     Else
  722.                         'it is valid
  723.                         frmOptions.txtResume.Visible = True
  724.                         frmOptions.txtResume.Text = Str(FileMark + 1)
  725.                         
  726.                         'Exit loop
  727.                         Exit For
  728.                     End If
  729.                 End If
  730.             'loop if necessary
  731.             Next X
  732.         End If
  733.         
  734.         'Test flag
  735.         If Flag = 0 Then
  736.             'set message word
  737.             RightWord = "selected"
  738.         End If
  739. 'Jump label
  740. NoHilite:
  741.         'If none selected or displayed
  742.         If Flag = 0 Or File1.ListCount = 0 Then
  743.             'tell user
  744.             Beep
  745.             MsgBox "No files " & RightWord & " !", 48, "MIDI CYCLOTRON"
  746.             
  747.             'Uncheck
  748.             chkPlaySelect.value = 0
  749.             
  750.             'and exit
  751.             Exit Sub
  752.         End If
  753. 'Fall thro ' to here if option checked and files displayed and selected
  754.         'Determine file to start with
  755.         frmOptions.optMethod(0).Caption = "First file in selection"
  756.         frmOptions.Show 1
  757.         
  758.         'If play selection cancelled
  759.         If Cancelled = True Then
  760.             'then reset variable
  761.             Cancelled = False
  762.             
  763.             'reset form label default caption
  764.             frmOptions.optMethod(0).Caption = "First file"
  765.             
  766.             'uncheck Play Selection
  767.             chkPlaySelect.value = 0
  768.             
  769.             'and exit
  770.             Exit Sub
  771.         End If
  772.         'Set form label default caption
  773.         frmOptions.optMethod(0).Caption = "First file"
  774.         
  775.         'What was chosen ?
  776.         If StartWhere = 0 Then 'First chosen
  777.             'Start at beginning
  778.             y = 0
  779.         ElseIf StartWhere = 1 Then 'Number entered
  780.             'Start at number entered
  781.             y = StartNumber - 1
  782.         ElseIf StartWhere = 2 Then
  783.             'Name entered so loop to match names
  784.             For B = 0 To Me.File1.ListCount - 1
  785.                 
  786.                 'If match then
  787.                 If Me.File1.List(B) = StartName Then
  788.                     'If it's in selection then
  789.                     If Me.File1.Selected(B) Then
  790.                         'Set file number to play
  791.                         y = B
  792.                         
  793.                         'and exit loop
  794.                         Exit For
  795.                     End If
  796.                 'Otherwise, if we are at end of list and Flag = 0 (no names matched)
  797.                 ElseIf B = Me.File1.ListCount - 1 And Me.File1.List(B) <> StartName Then
  798.                     'then tell user
  799.                     Beep
  800.                     MsgBox "File name not found in selection", 64, "MIDI CYCLOTRON"
  801.                     
  802.                     'Uncheck box
  803.                     chkPlaySelect.value = 0
  804.                     
  805.                     'and exit
  806.                     Exit Sub
  807.                 End If
  808.             'Loop if not at end
  809.             Next B
  810.         'Otherwise,
  811.         ElseIf StartWhere = 3 Then
  812.             'start at last file played in this session
  813.             y = FileMark
  814.         End If
  815.         
  816.         'Bring 'Play Selected' MCI to front
  817.         MMSelect.ZOrder 0
  818.         
  819.         'Close single play MCI in case it is running
  820.         MMSingle.Command = "Close"
  821.         
  822.         'and start the timer to play selected files
  823.         Timer2.Interval = 1
  824.     'Otherwise,
  825.     Else
  826.         'uncheck play selected
  827.         chkPlaySelect.value = 0
  828.         
  829.         'Close the device
  830.         MMSelect.Command = "Close"
  831.         
  832.         'Reset form label caption
  833.         Label2.Caption = File1.ListCount & " Files"
  834.         
  835.         'and bring single play MCI to front
  836.         MMSingle.ZOrder 0
  837.         
  838.         'Reset file counter
  839.         y = 0
  840.     End If
  841. End Sub
  842. Private Sub cmdCherish_Click()
  843.     'We don't want to crash if 'Favourites' folder has
  844.     'been moved or deleted !
  845.     'So test for it
  846.     On Error GoTo Handle_It
  847.     ChDir FavouritesPath
  848.     'Now change back to App's path since the 'Favourites'  folder now
  849.     'positively exists one way or the other
  850.     '(See form level procedure 'Handle_It')
  851.     ChDir App.Path
  852.     'If multi selections are in effect then a file will be playing (The one to copy)
  853.     'Otherwise, single play is in effect so,
  854.     If chkPlayAll.value = 0 And chkPlaySelect.value = 0 Then
  855.         'Dim a flag
  856.         Flag = 0
  857.         
  858.         'Test File1 for a current selection
  859.         For z = 0 To File1.ListCount - 1
  860.             'If a file is select then set flag
  861.             If File1.Selected(z) Then
  862.                 Flag = 1
  863.                 
  864.                 'and exit loop
  865.                 Exit For
  866.             End If
  867.         'Otherwise loop
  868.         Next z
  869.         'If Flag is unset then none are selected
  870.         If Flag = 0 Then
  871.             Beep
  872.             'there is just the first file, File1's default filename
  873.             'and none are selected
  874.             '(Not the intended purpose of the button)
  875.             MsgBox "No Current File !", 48, "MIDI CYCLOTRON"
  876.             
  877.             'so exit
  878.             Exit Sub
  879.         End If
  880.     End If
  881.     'If in single play mode then
  882.     If chkPlaySelect.value = 0 And chkPlayAll.value = 0 Then
  883.         'The Right Name = File1.Filename
  884.         'The one selected, playing or just played
  885.         RightName = File1.filename
  886.     'Otherwise if Play Selection then
  887.     ElseIf chkPlaySelect.value = 1 Then
  888.         'The Right Name = File1.List(y-1).  The one currently playing
  889.         '(When the timer played the file it incremented it's counter)
  890.         RightName = File1.List(y - 1)
  891.     'Otherwise if Play All then
  892.     ElseIf chkPlayAll.value = 1 Then
  893.         'The Right Name = File1.List(i - 1).  The one currently playing
  894.         '(When the timer played the file it incremented it's counter)
  895.         RightName = File1.List(i - 1)
  896.     End If
  897.     'Copy the file testing for the root
  898.     If Right(Dir1.Path, 1) = "\" Then
  899.         FileCopy Dir1.Path & RightName, FavouritesPath & "\" & RightName
  900.     Else
  901.         FileCopy Dir1.Path & "\" & RightName, FavouritesPath & "\" & RightName
  902.     End If
  903.     'and tell the user it's done
  904.     Beep
  905.     MsgBox UCase(RightName) & " copied successfully", 64, "MIDI CYCLOTRON"
  906.     'Exit before error handling
  907.     Exit Sub
  908. 'Handle 'path not found error'
  909. Handle_It:
  910.     'Form level subroutine (See 'General')
  911.     Handle_Error
  912.     'Go back to the line following the one causing the error
  913.     Resume Next
  914. End Sub
  915. Private Sub cmdCherish_KeyPress(KeyAscii As Integer)
  916.     'If enter is pressed
  917.     If KeyAscii = 13 Then
  918.         'stop dreaded beep
  919.         KeyAscii = 0
  920.         'and activate file copy event
  921.         cmdCherish_Click
  922.     End If
  923. End Sub
  924. Private Sub cmdDone_Click()
  925.     'Trigger form unload event
  926.     Form_Unload (0)
  927. End Sub
  928. Private Sub cmdDone_KeyPress(KeyAscii As Integer)
  929.     'If enter is pressed then
  930.     If KeyAscii = 13 Then
  931.         'stop dreaded beep
  932.         KeyAscii = 0
  933.         'and trigger click event
  934.         cmdDone_Click
  935.     End If
  936. End Sub
  937. Private Sub cmdDown_Click()
  938.     'If timer interval = 5 it can't be lower so loop
  939.     If s = 5 Then
  940.         s = 60
  941.     'Otherwise,
  942.     Else
  943.         'decrease it by 5
  944.         s = s - 5
  945.     End If
  946.     'Display it
  947.     txtSpeed.Text = s
  948.     'Then set timer interval accordingly (1000 = approx 1 sec.)
  949.     '(s, (an integer), * 1000 causes an overflow error when s is > 30) ???
  950.     Timer3.Interval = s * 100 & 0 '(This doesn't) ???
  951.     '(This is a workaround but it's less code than say, 'Select Case s' )
  952.     'New interval will be applied after current interval
  953. End Sub
  954. Private Sub cmdDown_KeyPress(KeyAscii As Integer)
  955.     'If enter Is pressed then
  956.     If KeyAscii = 13 Then
  957.         'stop dreaded beep
  958.         KeyAscii = 0
  959.         'and trigger click event
  960.         cmdDown_Click
  961.     End If
  962. End Sub
  963. Private Sub cmdHold_Click()
  964.     'Stop graphics from rolling
  965.     Timer3.Enabled = False
  966.     'Disable Hold
  967.     cmdHold.Enabled = False
  968.     'Enable Roll
  969.     cmdRoll.Enabled = True
  970. End Sub
  971. Private Sub cmdHold_KeyPress(KeyAscii As Integer)
  972. 'If enter Is pressed then
  973.     If KeyAscii = 13 Then
  974.         'stop dreaded beep
  975.         KeyAscii = 0
  976.         'and trigger click event
  977.         cmdHold_Click
  978.     End If
  979. End Sub
  980. Private Sub cmdRoll_Click()
  981.     'Seed the random number generator using the
  982.     'return value of the system timer
  983.     Randomize
  984.     'Roll graphics
  985.     Timer3.Enabled = True
  986.     'Disable Roll
  987.     cmdRoll.Enabled = False
  988.     'Enable Hold
  989.     cmdHold.Enabled = True
  990. End Sub
  991. Private Sub cmdRoll_KeyPress(KeyAscii As Integer)
  992.     'If enter is pressed then
  993.     If KeyAscii = 13 Then
  994.         'stop dreaded beep
  995.         KeyAscii = 0
  996.         'and trigger click event
  997.         cmdRoll_Click
  998.     End If
  999. End Sub
  1000. Private Sub cmdUp_Click()
  1001.     'If timer interval is at 60 it can't be greater so loop
  1002.     If s = 60 Then
  1003.         s = 5
  1004.     'Otherwise
  1005.     Else
  1006.         'increase it by 5
  1007.         s = s + 5
  1008.     End If
  1009.     'and display it
  1010.     txtSpeed.Text = s
  1011.     'Then set timer interval accordingly (1000 = approx 1 sec.)
  1012.     '(s, (an integer), * 1000, causes an overflow error when s is > 30) ???
  1013.     Timer3.Interval = s * 100 & 0 '(This doesn't) ???
  1014.     '(This is a workaround but it's less code than say, 'Select Case s' )
  1015.     'New interval will be applied after current interval
  1016. End Sub
  1017. Private Sub cmdUp_KeyPress(KeyAscii As Integer)
  1018.     'If enter is pressed then
  1019.         If KeyAscii = 13 Then
  1020.             'stop dreaded beep
  1021.             KeyAscii = 0
  1022.             'and trigger click event
  1023.             cmdUp_Click
  1024.         End If
  1025. End Sub
  1026. Private Sub Dir1_Change()
  1027.     'Set file list to Folder path
  1028.     File1.Path = Dir1.Path
  1029. End Sub
  1030. Private Sub Drive1_Change()
  1031.     On Error GoTo Handle_It
  1032.     'Set folder path to selected drive
  1033.     Dir1.Path = Drive1.Drive
  1034.     Exit Sub
  1035. 'Arrive here if no floppy in a:\ or b:\
  1036. Handle_It:
  1037.     Handle_Error
  1038.     Exit Sub
  1039. End Sub
  1040. Private Sub File1_Click()
  1041. End Sub
  1042. Private Sub File1_DblClick()
  1043.     'Play A Single File !
  1044.     'If either Play Selection or Play All is checked then
  1045.     'double-click not applicable
  1046.     If chkPlayAll.value = 1 Or chkPlaySelect.value = 1 Then
  1047.         'so exit
  1048.         Exit Sub
  1049.     'Otherwise
  1050.     Else
  1051.         'Dim variable for MCI update interval
  1052.         Dim msec As Double
  1053.         
  1054.         ' Set the number of milliseconds between successive
  1055.         ' StatusUpdate events. (0 = stops it)
  1056.         MMSingle.UpdateInterval = 0
  1057.         
  1058.         ' If the single play device is open, close it.
  1059.         If Not MMSingle.Mode = vbMCIModeNotOpen Then
  1060.             MMSingle.Command = "Close"
  1061.         End If
  1062.         
  1063.         'Test for root dir
  1064.         If Right(Dir1.Path, 1) = "\" Then
  1065.             'Set path to root
  1066.             FilePath = Dir1.Path & File1.filename
  1067.         Else
  1068.             'Otherwise set to heirarchal structure
  1069.             FilePath = Dir1.Path & "\" & File1.filename
  1070.         End If
  1071.         
  1072.         ' Open the device with the new filename.
  1073.         MMSingle.filename = FilePath
  1074.         
  1075.         'Trap possible errors
  1076.         On Error GoTo MCI_ERROR
  1077.         
  1078.         'Open the device
  1079.         MMSingle.Command = "Open"
  1080.         
  1081.         'Trap possible errors
  1082.         On Error GoTo 0
  1083.         
  1084.         'Set caption for form
  1085.         Caption = DialogCaption + File1.filename & "  File number " & File1.ListIndex + 1
  1086.         
  1087.         'Activate MMSingle_Done event when finished to reset form label
  1088.         MMSingle.Notify = True
  1089.         
  1090.         ' Set the timing format for the scroll bar.
  1091.         MMSingle.TimeFormat = vbMCIFormatMilliseconds
  1092.         msec = (CDbl(MMSingle.Length) / 1000)
  1093.         
  1094.         'Set form label caption to show length
  1095.         'If less than 1 minute then
  1096.         If msec < 60 Then
  1097.             'show only seconds
  1098.             Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec) & " Secs."
  1099.         'Otherwise,
  1100.         Else
  1101.             'show minutes and seconds
  1102.             Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec / 60) & " Mins." & msec Mod (60) & " Secs."
  1103.         End If
  1104.         
  1105.         'msec is Private. msecs is Public & is used by MCI control
  1106.         'to reset form label caption if file has been stopped
  1107.         'then restarted
  1108.         msecs = msec
  1109.         
  1110.         ' Set the scrollbar values.
  1111.         Hscroll1.value = 0
  1112.         CurrentValue = 0#
  1113.         
  1114.         'Start playing
  1115.         MMSingle.Command = "Play"
  1116.         
  1117.         'Start incrementing scroll bar
  1118.         MMSingle.UpdateInterval = conInterval
  1119.         
  1120.         'Exit before error handling
  1121.         Exit Sub
  1122.     End If
  1123. MCI_ERROR:
  1124.     DisplayErrorMessageBox
  1125.     Resume MCI_EXIT
  1126. MCI_EXIT:
  1127.     Unload Me
  1128. End Sub
  1129. Private Sub File1_KeyPress(KeyAscii As Integer)
  1130.     'If 'Enter' is pressed and single play is in effect
  1131.     If KeyAscii = 13 And chkPlayAll.value = 0 And chkPlaySelect.value = 0 Then
  1132.         'then stop dreaded Beep!
  1133.         KeyAscii = 0
  1134.         
  1135.         'and activate double-click event (which see)
  1136.         File1_DblClick
  1137.     'Otherwise,
  1138.     Else
  1139.         'just stop Beep!
  1140.         KeyAscii = 0
  1141.     End If
  1142. End Sub
  1143. Private Sub File1_PathChange()
  1144.     'Reset form caption every time
  1145.     Me.Caption = "MIDI CYCLOTRON "
  1146.     'If list has changed then if files are displayed
  1147.     If File1.ListCount > 0 Then
  1148.         'show number of files in form label caption
  1149.         Label2.Caption = File1.ListCount & " Files"
  1150.         
  1151.         'Is the application being run from a 'non writeable' drive ?
  1152.         'If it is then,
  1153.         If Drv < 2 Or Drv > 4 Then
  1154.             'disable 'copy to favourites' button regardless
  1155.             cmdCherish.Enabled = False
  1156.             
  1157.             'and jump
  1158.             GoTo SkipDir
  1159.         End If
  1160.         'Otherwise, enable the file copy button if NOT logged
  1161.         'on to 'Favourites'
  1162.         checkforfolder$ = Trim$(Right$(Dir1.Path, 8))
  1163.         If checkforfolder$ = "faverits" Then
  1164.             cmdCherish.Enabled = False
  1165.         Else
  1166.             cmdCherish.Enabled = True
  1167.         End If
  1168.     'Otherwise,
  1169.     Else
  1170.         'show nothing
  1171.         Label2.Caption = ""
  1172.         
  1173.         'Also disable file copy button
  1174.         cmdCherish.Enabled = False
  1175.     End If
  1176. SkipDir:
  1177.     'A path change is extreme so
  1178.     'stop everything regardless of current status
  1179.     chkPlayAll.value = 0
  1180.     chkPlaySelect.value = 0
  1181.     MMSingle.Command = "Close"
  1182.     'Invalidate 'resume at' variable
  1183.     FileMark = -1
  1184. End Sub
  1185. Private Sub Form_Load()
  1186.     '(M)edia (C)ontrol (I)nterface (App)lication form
  1187.     'Test for previous instance of application
  1188.     '(We don't want a tussle for the use of sound)
  1189.     'If so, then
  1190.     If App.PrevInstance Then '(This does not work in VB runtime)
  1191.         'Tell user
  1192.         MsgBox "A previous instance of this application is already running !", 16, "MIDI CYCLOTRON"
  1193.         'and end
  1194.         End
  1195.     End If
  1196.     'Are we running from a media we can write to ?
  1197.     '(If we are, the return value will be,
  1198.     '2 - Removable, 3 - Fixed or 4 - Remote)
  1199.     'For completeness, 1 = No Root
  1200.     'If 32bit then         (Conditional compilation for API calls)
  1201.     #If Win32 Then
  1202.         'Get Drive Type. (32bit function uses a String parameter)
  1203.         Drv = GetDriveType(Left(App.Path, 3)) '(e.g. "C:\")
  1204.         'If Path is CDRom, Drv will = 5 (CDRom specific)
  1205.     'Otherwise, if 16bit then
  1206.     #Else
  1207.         'Get Drive Type. (16bit function uses an Integer parameter)
  1208.         '0 = Drive A:\, 1 = Drive B:\, 2 = Drive C:\, etc.
  1209.         D = (Asc(UCase(Left(App.Path, 1))) - 65)
  1210.         'If Left(App.Path, 1) = 'A' then D will = 0 Since Asc("A") = 65
  1211.         Drv = GetDriveType(D)
  1212.         'The 16bit function does not recognise a CD Rom !
  1213.         'If Path is CDRom, Drv will = 0 (Unidentifiable drive)
  1214.         'Good enough for our purpose
  1215.     #End If
  1216.     'If non writeable drive then jump to avoid testing for, and subsequent
  1217.     'attempt to create, a 'Favourites' folder
  1218.     If Drv < 2 Or Drv > 4 Then
  1219.         GoTo SkipDir
  1220.     End If
  1221.     'Error handler in case of missing 'Favourites' folder
  1222.     'when application is NOT being run from CD
  1223.     On Error GoTo Handle_It '(Form level routine.  See 'General')
  1224.     'Are we in root or not
  1225.     If Right(App.Path, 1) = "\" Then
  1226.         'Root so,
  1227.         FavouritesPath = App.Path & "faverits"
  1228.     Else
  1229.         'Heirarchic so, -----------------------v
  1230.         FavouritesPath = App.Path & "\faverits"
  1231.     End If
  1232.     'Test for existence of favourites folder
  1233.     ChDir FavouritesPath
  1234.     'Change back to App's path since 'Favourites'  now positively
  1235.     'exists one way or the other (See label 'Handle_It')
  1236.     ChDir App.Path
  1237. ''We fall through to here if our path is a 'non writeable' drive
  1238. SkipDir:
  1239.     'Hide and enable/disable the MCI buttons as appropriate
  1240.     'to the applications purpose
  1241.     MMSingle.EjectVisible = False
  1242.     MMSingle.RecordVisible = False
  1243.     MMSingle.StepVisible = False
  1244.     MMSingle.BackVisible = False
  1245.     MMSelect.EjectVisible = False
  1246.     MMSelect.RecordVisible = False
  1247.     MMSelect.StepVisible = False
  1248.     MMSelect.BackVisible = False
  1249.     MMSelect.PrevEnabled = False
  1250.     MMSelect.NextEnabled = False
  1251.     MMSelect.PauseEnabled = False
  1252.     MMSelect.PlayEnabled = False
  1253.     MMSelect.StopEnabled = True
  1254.     MMAll.EjectVisible = False
  1255.     MMAll.RecordVisible = False
  1256.     MMAll.StepVisible = False
  1257.     MMAll.BackVisible = False
  1258.     MMAll.PrevEnabled = False
  1259.     MMAll.NextEnabled = False
  1260.     MMAll.PauseEnabled = False
  1261.     MMAll.PlayEnabled = False
  1262.     MMAll.StopEnabled = True
  1263.     'Centre form on screen
  1264.     Top = (Screen.Height - Height) / 2
  1265.     Left = (Screen.Width - Width) / 2
  1266.     'Default height & width when window is in normal state
  1267.     '(See Form_Resize event)
  1268.     DefH = Me.Height
  1269.     DefW = Me.Width
  1270.     'Set variable default value for graphics timer
  1271.     s = 10
  1272.     'Form caption leader when playing a file
  1273.     DialogCaption = "MIDI CYCLOTRON - "
  1274.     'Form caption otherwise
  1275.     Me.Caption = "MIDI CYCLOTRON "
  1276.     'Define the function of the MCI controls
  1277.     Me.MMAll.DeviceType = "Sequencer"
  1278.     Me.MMSingle.DeviceType = "Sequencer"
  1279.     Me.MMSingle.ZOrder 0 'On Top (Default state)
  1280.     Me.MMSelect.DeviceType = "Sequencer"
  1281.     'If midi files are displayed then conditionally enable
  1282.     'the 'Copy To Favourites' button
  1283.     '(Favourites folder will not be the current path at this stage)
  1284.     If File1.ListCount > 0 Then
  1285.         Select Case Drv
  1286.             'If writeable drive,
  1287.             Case 2, 3, 4
  1288.                 'then enable 'copy To Favourites' button
  1289.                 cmdCherish.Enabled = True
  1290.             End Select
  1291.     End If
  1292.     'Initialise 'resume at' variable for mutli-play options (-1 = invalid)
  1293.     FileMark = -1
  1294.     'Unload startup banner
  1295.     Unload frmStartup
  1296.     'and exit before error handling
  1297.     Exit Sub
  1298. 'Handle 'path not found' error
  1299. Handle_It:
  1300.     'Form level subroutine (See General)
  1301.     Handle_Error
  1302.     'Go back to the line following the one causing the error
  1303.     Resume Next
  1304. End Sub
  1305. Private Sub Form_Resize()
  1306.     'If window is in normal state then
  1307.     If Me.WindowState = 0 Then
  1308.         'If height or width less than or greater than defaults then
  1309.         If Me.Height <> DefH Or Me.Width <> DefW Then
  1310.             'set to defaults
  1311.             Me.Height = DefH
  1312.             Me.Width = DefW
  1313.         End If
  1314.         
  1315.         'Change label colour using the constant black in the event that
  1316.         'the previous state may have been 2 (Maximised)
  1317.         Label2.ForeColor = black
  1318.         Label3.ForeColor = black
  1319.         Label4.ForeColor = black
  1320.         Label5.ForeColor = black
  1321.         
  1322.         'Stop timer
  1323.         Timer3.Enabled = False
  1324.         
  1325.         'Reset form colour using the constant grey
  1326.         Me.BackColor = grey
  1327.     'If window state is maximised then conditionally
  1328.     'start timers for graphics
  1329.     ElseIf Me.WindowState = 2 Then
  1330.         'If graphics are not held then enable rolling
  1331.         If cmdHold.Enabled = True Then
  1332.             'Seed the random number generator using the
  1333.             'return value of the system timer (See language reference)
  1334.             Randomize
  1335.             
  1336.             'Change label colours using the constant white
  1337.             Label2.ForeColor = white
  1338.             Label3.ForeColor = white
  1339.             Label4.ForeColor = white
  1340.             Label5.ForeColor = white
  1341.             
  1342.             'Start timer
  1343.             Timer3.Enabled = True
  1344.         End If
  1345.     'Otherwise it's minimised so
  1346.     Else
  1347.         'If timer not already stopped then
  1348.         If cmdHold.Enabled = True Then
  1349.             'stop it
  1350.             Timer3.Enabled = False
  1351.         End If
  1352.     End If
  1353. End Sub
  1354. Private Sub Form_Unload(Cancel As Integer)
  1355.     'Ensure devices are closed
  1356.     MMAll.Command = "Close"
  1357.     MMSingle.Command = "Close"
  1358.     MMSelect.Command = "Close"
  1359.     'Close the program
  1360.     Unload Me
  1361.     End
  1362. End Sub
  1363. Private Sub Label3_Click()
  1364.     'If we use the check box label property then
  1365.     'we would have to specifically set it's back colour
  1366.     'when the form is maximised.  This label is transparent
  1367.     'Toggle chkPlaySelect Value
  1368.     If chkPlaySelect.value = 0 Then
  1369.         chkPlaySelect.value = 1
  1370.     Else
  1371.         chkPlaySelect.value = 0
  1372.     End If
  1373. End Sub
  1374. Private Sub Label4_Click()
  1375.     'If we use the check box label property then
  1376.     'we would have to specifically set it's back colour
  1377.     'when the form is maximised.  This label is transparent
  1378.     'Toggle chkPlaySelect Value
  1379.     If chkPlayAll.value = 0 Then
  1380.         chkPlayAll.value = 1
  1381.     Else
  1382.         chkPlayAll.value = 0
  1383.     End If
  1384. End Sub
  1385. Private Sub Label5_Click()
  1386.     'If we use the check box label property then
  1387.     'we would have to specifically set it's back colour
  1388.     'when the form is maximised.  This label is transparent
  1389.     'Toggle chkPlaySelect Value
  1390.     If chkLoop.value = 0 Then
  1391.         chkLoop.value = 1
  1392.     Else
  1393.         chkLoop.value = 0
  1394.     End If
  1395. End Sub
  1396. Private Sub MMAll_Done(NotifyCode As Integer)
  1397.     'File is finished playing so
  1398.     If chkPlayAll.value = 1 Then
  1399.         'start timer to play next (or first if loop selected)
  1400.         Timer1.Interval = 1
  1401.     End If
  1402. End Sub
  1403. Private Sub MMAll_StatusUpdate()
  1404.     'When to move the scroll bar !
  1405.     Dim value As Integer
  1406.     'If the device is not playing, reset to the beginning.
  1407.     If Not MMAll.Mode = vbMCIModePlay Then
  1408.         Hscroll1.value = Hscroll1.Max
  1409.         MMAll.UpdateInterval = 0
  1410.         Exit Sub
  1411.     End If
  1412.     'Determine how much of the file has played.  Set a
  1413.     'value of the scrollbar between 0 and 100.
  1414.     CurrentValue = CurrentValue + conIntervalPlus
  1415.     value = CInt((CurrentValue / MMAll.Length) * 100)
  1416.     If value > Hscroll1.Max Then
  1417.         value = 100
  1418.     End If
  1419.     Hscroll1.value = value
  1420. End Sub
  1421. Private Sub MMAll_StopClick(Cancel As Integer)
  1422.     'Stop was clicked so
  1423.     If chkPlayAll.value = 1 Then
  1424.         'start timer to play next (or first if loop selected)
  1425.         Timer1.Interval = 1
  1426.     End If
  1427. End Sub
  1428. Private Sub MMSingle_PauseClick(Cancel As Integer)
  1429.     ' Set the number of milliseconds between successive
  1430.     ' StatusUpdate events.
  1431.     MMSingle.UpdateInterval = 0 '(stop it)
  1432. End Sub
  1433. Private Sub MMSingle_PlayClick(Cancel As Integer)
  1434.     ' Set the number of milliseconds between successive
  1435.     ' StatusUpdate events.
  1436.     MMSingle.UpdateInterval = conInterval
  1437.     'Set form label caption to show length
  1438.     'If less then 1 minute then
  1439.     If msecs < 60 Then
  1440.         'show only seconds
  1441.         Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msecs) & " Secs."
  1442.         'Otherwise,
  1443.     Else
  1444.         'show minutes and seconds
  1445.         Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msecs / 60) & " Mins." & msecs Mod (60) & " Secs."
  1446.     End If
  1447. End Sub
  1448. Private Sub MMSingle_PrevClick(Cancel As Integer)
  1449.     ' Set the number of milliseconds between successive
  1450.     ' StatusUpdate events.
  1451.     MMSingle.UpdateInterval = 0 '(stop it)
  1452.     ' Reset the scrollbar values.
  1453.     Hscroll1.value = 0
  1454.     CurrentValue = 0#
  1455.     'Set to previous
  1456.     MMSingle.Command = "Prev"
  1457. End Sub
  1458. Private Sub MMSingle_StatusUpdate()
  1459.     'When to move the scroll bar
  1460.     Dim value As Integer
  1461.     ' If the device is not playing, reset to the beginning.
  1462.     If Not MMSingle.Mode = vbMCIModePlay Then
  1463.         Hscroll1.value = Hscroll1.Max
  1464.         MMSingle.UpdateInterval = 0
  1465.         Exit Sub
  1466.     End If
  1467.     ' Determine how much of the file has played.  Set a
  1468.     ' value of the scrollbar between 0 and 100.
  1469.     CurrentValue = CurrentValue + conIntervalPlus
  1470.     value = CInt((CurrentValue / MMSingle.Length) * 100)
  1471.     If value > Hscroll1.Max Then
  1472.         value = 100
  1473.     End If
  1474.     Hscroll1.value = value
  1475. End Sub
  1476. Private Sub MMSingle_StopClick(Cancel As Integer)
  1477.     'Reset label caption
  1478.     Label2.Caption = File1.ListCount & " Files"
  1479. End Sub
  1480. Private Sub MMSelect_Done(NotifyCode As Integer)
  1481.     'File is finished playing so
  1482.     If chkPlaySelect.value = 1 Then
  1483.         'start timer to play next (or first if looping)
  1484.         Timer2.Interval = 1
  1485.     End If
  1486. End Sub
  1487. Private Sub MMSelect_StatusUpdate()
  1488.     'When to move the scroll bar !
  1489.     Dim value As Integer
  1490.     ' If the device is not playing, reset to the beginning.
  1491.     If Not MMSelect.Mode = vbMCIModePlay Then
  1492.         Hscroll1.value = Hscroll1.Max
  1493.         MMSelect.UpdateInterval = 0
  1494.         Exit Sub
  1495.     End If
  1496.     ' Determine how much of the file has played.  Set a
  1497.     ' value of the scrollbar between 0 and 100.
  1498.     CurrentValue = CurrentValue + conIntervalPlus
  1499.     value = CInt((CurrentValue / MMSelect.Length) * 100)
  1500.     If value > Hscroll1.Max Then
  1501.         value = 100
  1502.     End If
  1503.     Hscroll1.value = value
  1504. End Sub
  1505. Private Sub MMSelect_StopClick(Cancel As Integer)
  1506.     'Stop was clicked so
  1507.     If chkPlayAll.value = 1 Then
  1508.         'start timer to play next (or first)
  1509.         Timer2.Interval = 1
  1510.     End If
  1511. End Sub
  1512. Private Sub Timer1_Timer()
  1513.     'If the last file has played check for 'loop' selected
  1514.     If i = File1.ListCount And chkLoop.value = 0 Then
  1515.         'If not, set counter to first file
  1516.         i = 0
  1517.         
  1518.         'Reset 'resume at' var
  1519.         FileMark = -1
  1520.         
  1521.         'and disable it
  1522.         frmOptions.optMethod(3).Enabled = False
  1523.         frmOptions.txtResume.Visible = False
  1524.         
  1525.         'Uncheck Play All
  1526.         chkPlayAll.value = 0
  1527.         
  1528.         'and stop timer
  1529.         Timer1.Interval = 0
  1530.         
  1531.         'then exit
  1532.         Exit Sub
  1533.     'Otherwise, if last file has played
  1534.     ElseIf i = File1.ListCount Then
  1535.         'then set to first file
  1536.         i = 0
  1537.     End If
  1538.     'Play The Lot !
  1539.     Dim msec As Double
  1540.     'Set the number of milliseconds between successive
  1541.     'StatusUpdate events. (0 = stop it)
  1542.     MMAll.UpdateInterval = 0
  1543.     'If the device is open, close it.
  1544.     If Not MMAll.Mode = vbMCIModeNotOpen Then
  1545.         MMAll.Command = "Close"
  1546.     End If
  1547.    'Test for root dir
  1548.     If Right(Dir1.Path, 1) = "\" Then
  1549.         'Set path to root
  1550.         FilePath = Dir1.Path & File1.List(i)
  1551.     Else
  1552.         'Otherwise set to heirarchic structure
  1553.         FilePath = Dir1.Path & "\" & File1.List(i)
  1554.     End If
  1555.     ' Set the new filename for the device.
  1556.     MMAll.filename = FilePath
  1557.     'Trap possible errors
  1558.     On Error GoTo MCI_ERROR
  1559.     'Open the device
  1560.     MMAll.Command = "Open"
  1561.     'Trap possible errors
  1562.     On Error GoTo 0
  1563.     'Set form caption
  1564.     Caption = DialogCaption + File1.List(i) & "  File number " & i + 1 & playing
  1565.     'Set the timing labels on the form.
  1566.     MMAll.TimeFormat = vbMCIFormatMilliseconds
  1567.     msec = (CDbl(MMAll.Length) / 1000)
  1568.     'Set label caption to include length in seconds or minutes & seconds
  1569.     If msec < 60 Then
  1570.         Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec) & " Secs."
  1571.     Else
  1572.         Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec / 60) & " Mins." & msec Mod (60) & " Secs."
  1573.     End If
  1574.     'Set the scrollbar values.
  1575.     Hscroll1.value = 0
  1576.     CurrentValue = 0#
  1577.     'Make the control activate the 'Done' event when finished
  1578.     MMAll.Notify = True
  1579.     'then start it playing
  1580.     MMAll.Command = "Play"
  1581.     'Start incrementing scroll bar
  1582.     MMAll.UpdateInterval = conInterval
  1583.     'Loop or increment file counter
  1584.     'If the last file has played then
  1585.     If i = File1.ListCount Then
  1586.         'set it to first file
  1587.         i = 0
  1588.         
  1589.         'Reset resume at var
  1590.         FileMark = -1
  1591.         
  1592.         'and disable it
  1593.         frmOptions.optMethod(3).Enabled = False
  1594.         frmOptions.txtResume.Visible = False
  1595.     'Otherwise
  1596.     Else
  1597.         'set it to the next
  1598.         i = i + 1
  1599.         FileMark = i
  1600.         
  1601.         'and enable it
  1602.         frmOptions.optMethod(3).Enabled = True
  1603.         frmOptions.txtResume.Visible = True
  1604.         frmOptions.txtResume.Text = Str(FileMark)
  1605.     End If
  1606.     'Stop timer
  1607.     Timer1.Interval = 0
  1608.     'Exit before error handling
  1609.     Exit Sub
  1610. MCI_ERROR:
  1611.         'Public subroutine (See global.bas)
  1612.         DisplayErrorMessageBox
  1613.         Resume MCI_EXIT
  1614. MCI_EXIT:
  1615.         Unload Me
  1616. End Sub
  1617. Private Sub Timer2_Timer()
  1618.     'If last has been played check for 'loop' selected
  1619.     If y = File1.ListCount And chkLoop.value = 0 Then
  1620.         'If not selected, set counter to first
  1621.         y = 0
  1622.         
  1623.         'Reset 'resume at' option
  1624.         FileMark = -1
  1625.         
  1626.         'and disable it
  1627.         frmOptions.optMethod(3).Enabled = False
  1628.         frmOptions.txtResume.Visible = False
  1629.         
  1630.         'Uncheck Play Selection
  1631.         chkPlaySelect.value = 0
  1632.         
  1633.         'and stop timer
  1634.         Timer2.Interval = 0
  1635.         
  1636.         'then exit
  1637.         Exit Sub
  1638.     'Otherwise, if last file has been played
  1639.     ElseIf y = File1.ListCount Then
  1640.         'set to 0
  1641.         y = 0
  1642.     End If
  1643.     'and play those selected !
  1644.     Dim msec As Double
  1645.     ' Set the number of milliseconds between successive
  1646.     MMSelect.UpdateInterval = 0 '(0 = stop it)
  1647.     ' If the device is open, close it.
  1648.     If Not MMSelect.Mode = vbMCIModeNotOpen Then
  1649.         MMSelect.Command = "Close"
  1650.     End If
  1651.     ' Open the device with the new filename if one or more is selected.
  1652.     If File1.Selected(y) Then
  1653.         'Set value for resume at option
  1654.         FileMark = y
  1655.         
  1656.         'and enable it
  1657.         frmOptions.optMethod(3).Enabled = True
  1658.         frmOptions.txtResume.Visible = True
  1659.         frmOptions.txtResume.Text = Str(FileMark + 1)
  1660.         
  1661.         'Test for root folder
  1662.         If Right(Dir1.Path, 1) = "\" Then
  1663.             'Set path to root
  1664.             FilePath = Dir1.Path & File1.List(y)
  1665.         Else
  1666.             'Otherwise set to heirarchal structure
  1667.             FilePath = Dir1.Path & "\" & File1.List(y)
  1668.         End If
  1669.         
  1670.         'Set filename for device
  1671.         MMSelect.filename = FilePath
  1672.         
  1673.         'Trap possible errors
  1674.         On Error GoTo MCI_ERROR
  1675.         
  1676.         'Open the device
  1677.         MMSelect.Command = "Open"
  1678.         
  1679.         'Trap possible errors
  1680.         On Error GoTo 0
  1681.         
  1682.         'Set form caption
  1683.         Caption = DialogCaption + File1.List(y) & "  File number " & y + 1
  1684.         
  1685.         ' Set the timing.
  1686.         MMSelect.TimeFormat = vbMCIFormatMilliseconds
  1687.         msec = (CDbl(MMSelect.Length) / 1000)
  1688.         
  1689.         'Set label caption to include length in seconds or minutes & seconds
  1690.         If msec < 60 Then
  1691.             Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec) & " Secs."
  1692.         Else
  1693.             Label2.Caption = File1.ListCount & " Files. Music Length " & Int(msec / 60) & " Mins." & msec Mod (60) & " Secs."
  1694.         End If
  1695.         
  1696.         ' Set the scrollbar values.
  1697.         Hscroll1.value = 0
  1698.         CurrentValue = 0#
  1699.         
  1700.         'Make the device hold the focus until playing is finished
  1701.         MMSelect.Notify = True
  1702.         
  1703.         'Start playing
  1704.         MMSelect.Command = "Play"
  1705.         
  1706.         'Start incrementing scroll bar
  1707.         MMSelect.UpdateInterval = conInterval
  1708.         
  1709.         'Reset or increment file counter
  1710.         If y = File1.ListCount Then
  1711.             y = 0
  1712.         Else
  1713.             y = y + 1
  1714.         End If
  1715.         
  1716.         'Stop timer
  1717.         Timer2.Interval = 0
  1718.     'Otherwise,
  1719.     Else
  1720.         'Check for 'loop' selected
  1721.         If y = File1.ListCount - 1 And chkLoop.value = 0 Then
  1722.             'If so, set counter to 1
  1723.             y = 0
  1724.             
  1725.             'Reset 'resume at' var
  1726.             FileMark = -1
  1727.             
  1728.             'and disable it
  1729.             frmOptions.optMethod(3).Enabled = False
  1730.             frmOptions.txtResume.Visible = False
  1731.             
  1732.             'Uncheck Play Selected
  1733.             chkPlaySelect.value = 0
  1734.             
  1735.             'and stop timer
  1736.             Timer2.Interval = 0
  1737.             
  1738.             'then exit
  1739.             Exit Sub
  1740.         End If
  1741.         
  1742.         'Reset or increment file counter
  1743.         'If the last file has played then
  1744.         If y = File1.ListCount - 1 Then
  1745.             'go back to file number 1
  1746.             y = 0
  1747.         'Otherwise
  1748.         Else
  1749.             'go to the next
  1750.             y = y + 1
  1751.         End If
  1752.             
  1753.     End If
  1754.     'and exit before error handling without stopping timer
  1755.     'to allow it to test the next file for selection
  1756.     Exit Sub
  1757. MCI_ERROR:
  1758.         'Public subroutine (See global.bas)
  1759.         DisplayErrorMessageBox
  1760.         Resume MCI_EXIT
  1761. MCI_EXIT:
  1762.         Unload Me
  1763. End Sub
  1764. Private Sub Timer3_Timer()
  1765.     'Seed the random number generator using the value of the system timer
  1766.     Randomize
  1767.     'Set random RGB colours limiting range to between 40 and 215
  1768.     'for form & controls (this helps in stopping it being too stark)
  1769.     r = ((215 - 40) * Rnd + 40)
  1770.     g = ((215 - 40) * Rnd + 40)
  1771.     B = ((215 - 40) * Rnd + 40)
  1772.     'Hide the current images
  1773.     Image1(a).Visible = False
  1774.     Image2(a).Visible = False
  1775.     'If the last images are shown
  1776.     If a = 9 Then
  1777.         'reset them to first
  1778.         a = 0
  1779.         
  1780.         'Note: Setting the form colour outside this 'If/Then' construct
  1781.         'causes double flashing of the images
  1782.         'Set control & form colours to r, g, b
  1783.         Me.BackColor = RGB(r, g, B)
  1784.         
  1785.         'and show the first
  1786.         Image1(a).Visible = True
  1787.         Image2(a).Visible = True
  1788.     'Otherwise
  1789.     Else
  1790.         'increment them
  1791.         a = a + 1
  1792.         
  1793.         'Set control & form colours to r, g, b
  1794.         Me.BackColor = RGB(r, g, B)
  1795.         
  1796.         'and show next images
  1797.         Image1(a).Visible = True
  1798.         Image2(a).Visible = True
  1799.     End If
  1800. End Sub
  1801.